Permutation<U>
これで中級なん!?になったmrsekut.icon
似た知識が必要でIsUnionの方が簡単
使用例
code:ts
type Perm = Permutation<'A' | 'B' | 'C'>;
/**
*/
定義
code:ts
type Permutation<T, U = T> =
: never;
[T] extends [never]
単純に、Tがneverかどうか?の条件分岐を書きたい
しかし、単純にT extends neverとは書けない
T extends T
T extends T ? [..]の形なので、「配列のunion」にしている
型引数U
「分配前のT」を保存するために型引数Uを定義している
分配されてT=1の時に着目すると、
T extends Tの?節は、[1, ...Permutaion<2|3>]になる
Permutation<2|3>は、[2,3]|[3,2]なので、
結果として[1,2,3]|[1,3,2]になる
考え方
まず大枠を見れば、(文字の)Union→(配列の)Unionの変換であることから
すると、distributeされるので、例えばT=1の時に着眼できる
後は、tail(2|3)と再帰を使っていい感じにやろう〜ってことか
難し〜〜mrsekut.icon
一応リンクしておくmrsekut.icon
参考
詳しい解説
ぐぐったら引数が配列のやつも出てきた
多分古いのでもうちょい簡潔に書ける